import { reqGetUserDetail, reqGetUserInfo, reqLogin } from '@/api/user'
import { setToken, getToken, removeToken } from '@/utils/auth'

export default {
  namespaced: true,
  state: {
    token: getToken() || '',
    userInfo: {} // 个人信息
  },
  mutations: {
    // 存储token的mutation
    setToken(state, token) {
      // 将token存储到vuex中
      state.token = token
      // 将token存储到cookie中持久化
      setToken(token)
    },
    // 设置个人信息的mutation
    setUserInfo(state, info) {
      state.userInfo = info
    },
    // 移除token
    removeToken(state) {
      state.token = '' // vuex中清除token
      removeToken() // 本地存储中清除token
    },
    // 移除个人信息
    removeUserInfo(state) {
      state.userInfo = {}
    }
  },
  actions: {
    // 登录的action
    // login({ commit }, loginForm) {
    //   reqLogin(loginForm).then((res) => {
    //     console.log(res.data.data) // token
    //     commit('setToken', res.data.data)
    //   })
    // }
    async login({ commit }, loginForm) {
      const res = await reqLogin(loginForm)
      console.log(res)
      commit('setToken', res.data)// token
      // return res // 此处 return 为了让login组件接收到登录的结果,做消息提示
    },
    // 获取个人信息的action
    async getUserInfo({ commit }) {
      const { data } = await reqGetUserInfo() // 简陋的个人信息
      const { data: data2 } = await reqGetUserDetail(data.userId) // 丰满的个人信息
      commit('setUserInfo', { ...data, ...data2 })
    },
    // 退出的action
    logout({ commit }) {
      commit('removeToken')
      commit('removeUserInfo')
    }
  }
  // getters:是基于state中的状态派生出的新状态 计算属性
}

